
package persistencia;

import dominio.*;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;


public class PersistenciaMotorista {
    
   // private List<Motorista> motoristas = new ArrayList<Motorista>();
        private static PersistenciaMotorista InstanciaMotorista;
        private Connection conn;
        
   /**
 * Conexão com o banco de dados
 * 
 */
        private PersistenciaMotorista () {
                Conecta c = Conecta.getConnection();
                this.conn = c.conn;
        }
	 
/**
 * 
 * Singleton. Usado para que haja apenas uma conexão com o banco sendo usada no sistema
 * 
 */
        public static PersistenciaMotorista getInstance(){
	if(InstanciaMotorista == null) {
                        	InstanciaMotorista = new PersistenciaMotorista();
	    }
            return InstanciaMotorista;
        }  
        

/*
* Função que consulta o motorista pela cnh
* retornando todos os atributos do motorista
* @param motorista só com cnh
* @return motorista com todos os atributos
*/
   public Motorista consultarCnh(Motorista motorista){
        Statement statement;
        ResultSet result;
        try {
            statement = conn.createStatement();
            result = statement.executeQuery("SELECT * FROM Cliente WHERE cnh = "+"'"+motorista.getCnh()+"'");
            if (result.next()){
                Motorista m = new Motorista(
                        result.getString("nome"), result.getLong("cpf"), result.getString("endereco"), result.getLong("telefone"), result.getLong("cnh"));
                        return m;
            }
            else return null;
        } catch (SQLException ex) {
            System.out.println("Erro em consultar Cnh");
            //Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
           return null;
        }
    }

/* Função que cria lista todos os motoristas
* presentes no banco
* @retun listaMotoristas
*/
    public ArrayList<Motorista> listarMotoristas () {
                ArrayList<Motorista> motoristas = new ArrayList<Motorista>();
                Statement statement;
                ResultSet result;
                try {
                        statement = conn.createStatement();
                        result = statement.executeQuery("SELECT * FROM Motorista");
                        while (result.next()){
                                Motorista m = new Motorista(result.getString("nome"), result.getLong("cpf"), result.getString("endereco"),result.getLong("telefone"), result.getLong("cargo"));
                                motoristas.add(m);  
                        }
                        return motoristas;
                } catch (SQLException e) {
                    System.out.println("Erro em listar motoristas");
                        //Log.getLoginstance(null).error("Ocorreu um erro: "+e.getMessage());
                        return null;
                }
    }


/* Função que cadastra um motorista no banco de dados
* @param nome
* @param cpf
* @param endereco
* @param telefone
* @param cnh
* @return motorista
*/

    public void cadastroMotorista () {
            String nome, endereco;
            long cpf, cnh, telefone;
            Statement statement;

            System.out.println("Digite o nome do Motorista: ");
            nome = Console.readString();
            System.out.println("Digite o cpf do Motorista:");
            cpf = Console.readLong();
            System.out.println("Digite a cnh do Motorista:");
            cnh = Console.readLong();
            System.out.println("Digite o endereco do Motorista: ");
            endereco = Console.readString();
            System.out.println("Digite o telefone do Motorista:");
            telefone = Console.readLong();

            Motorista m = new Motorista(nome, cpf, cnh);
                if (consultarCnh(m) == null){
                    try {
                            statement = conn.createStatement();
                            statement.executeUpdate("INSERT INTO Motorista (nome,cpf,endereco,telefone, cnh) " +
                                            "values('"+nome+"','"+cpf+"','"+endereco+"','"+telefone+"','"+cnh+"')");
                            System.out.println("Motorista cadastrado com sucesso!");
                    } catch (SQLException e) {
                        System.out.println("Erro em cadastrar motorista");
//erro
                    }
               }
                else {
                    System.out.println("Motorista já estava cadastrado");
                }
    }

/* Função que altera um cadastro de um motorista
* @param cnh
*/
    public void alteraCadastroMotorista(long cnh){
            String endereco,aux;
            long telefone;
            Statement statement;
            
            Motorista motorista = new Motorista(null, 0, cnh);
            if(consultarCnh(motorista) != null) {
                try{
                    System.out.println("Digite o endereco do motorista");
                    endereco = Console.readString();
                    System.out.println("Digite o telefone do motorista");
                    telefone = Console.readLong();
                    statement = conn.createStatement();
                    statement.executeUpdate("UPDATE Motorista SET endereco =  '"+endereco+"' WHERE cnh='"+cnh+"'");
                    statement.executeUpdate("UPDATE Motorista SET telefone =  '"+telefone+"' WHERE cnh='"+cnh+"'");
                } catch (SQLException e) {
                    System.out.println("Erro em alterar cadastro");
                     //imprime erro
                    }
                System.out.println("Cadastro do Motorista alterado com sucesso!");
               }
         else {
                    System.out.println("Motorista não existe. Cadastre-o primeiro");
          }
    }


/* Função que imprime uma lista de motoristas
* @param listaMotoristas
*/

   public void imprimeLista(ArrayList<Motorista> motoristas) {

       for (int i=0; i < motoristas.size(); i++) {
           System.out.println(i);
           System.out.println("Nome: "+ motoristas.get(i).getNome());
           System.out.println("CPF: "+ motoristas.get(i).getCpf());
           System.out.println("CNH: "+ motoristas.get(i).getCnh());
           System.out.println("Endereco: "+ motoristas.get(i).getEndereco());
           System.out.println("Telefone: "+ motoristas.get(i).getTelefone());
           System.out.println();
       }
   }
} 
